package modelo;

import java.sql.ResultSet;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

public class OrdenDAO extends modelo.templatemethod.TemplateMetodo {

	public OrdenDAO() {
		super();
	}

	public void registrarOrden(Orden orden) {
		String tiraSQL = "INSERT INTO orden "+
		 				 "(codigoorden, codigocliente, fecha, totalpagar, status) "+
		 				 "VALUES ("+
		 				 "'"+orden.getCodigoorden()+"', '"+orden.getCodigocliente()+
		 				 "','"+orden.getFecha()+"',"+orden.getTotalpagar()+","+orden.getStatus()+" )";
		Conexion.ejecutar(tiraSQL);
	}
	
	public List<Producto> listadoVentasPorCantidad() {
		List<Producto> productos = new ArrayList<Producto>();
		String tiraSQL = "SELECT p.codigoproducto, p.descripcion, p.precio, d.cantidad FROM producto as p, detalleorden as d where p.codigoproducto=d.codigoproducto order by d.cantidad asc";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			while (resultSet.next()) {
				String codigoproducto = resultSet.getString("codigoproducto");
				String descripcion = resultSet.getString("descripcion");
				int cantidad = resultSet.getInt("cantidad");
				
				Producto producto = new Producto(codigoproducto, descripcion, "" , 0, cantidad);
				productos.add(producto);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return productos;
	}
	
	public List<Producto> listadoVentasPorMonto() {
		List<Producto> productos = new ArrayList<Producto>();
		String tiraSQL = "SELECT p.codigoproducto, p.descripcion, p.precio, d.cantidad FROM producto as p, detalleorden as d where p.codigoproducto=d.codigoproducto order by p.precio desc";
		ResultSet resultSet = Conexion.consultar(tiraSQL);		
		try {
			while (resultSet.next()) {
				String codigoproducto = resultSet.getString("codigoproducto");
				String descripcion = resultSet.getString("descripcion");
				int cantidad = resultSet.getInt("cantidad");
				float precio = resultSet.getFloat("precio");
				
				float monto =0;
				monto=cantidad*precio;
				
				Producto producto = new Producto(codigoproducto, descripcion, "" , monto, 0);
				productos.add(producto);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return productos;
	}
	
	public int generarNumero()
	{
		int numero=0;
	    String tsql="Select count(codigoorden) as Cuantos from orden";
	    ResultSet resultSet = Conexion.consultar(tsql);		
	    try
	    {
	    	if(resultSet.next())
	        {
	           numero=resultSet.getInt("Cuantos");
	        } //fin del if
	    } //fin del try
	    catch(Exception e)
	    {
	    	e.printStackTrace();
	    }
	    return numero+1;
	}
	
	public boolean descontarOrden(String codigoproducto, float cantidad){
		boolean seguir=false;
		float existencia=0;
		String codigoingrediente = "";
		float cantidadingrediente=0;
		float cantidadautilizar=0;
		
		String tiraSQL = "select codigoingrediente "+
					"from ingrediente where codigoingrediente = any"+
					"(select codigoingrediente from detalleproducto where "+
					"codigoproducto='"+codigoproducto+"')";
		
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while(resultSet.next()){
				codigoingrediente=resultSet.getString("codigoingrediente");
				String tiraSQL2 = "select i.descripcion, i.existencia, dp.cantidad from ingrediente as i "+
				", detalleproducto as dp where dp.codigoingrediente = '"+codigoingrediente+"' "+
				"and dp.codigoproducto = '"+codigoproducto+"' and i.codigoingrediente ='"+codigoingrediente+"'";
				ResultSet resultSet2 = Conexion.consultar(tiraSQL2);
				try{
					while(resultSet2.next()){
						String descripcion = resultSet2.getString("descripcion");
						existencia = resultSet2.getFloat("existencia");
						cantidadingrediente = resultSet2.getFloat("cantidad");
						cantidadautilizar=cantidad*cantidadingrediente;
						existencia = existencia-cantidadautilizar;
						String tiraSQL3 = "Update ingrediente set existencia = "
							+existencia+" where codigoingrediente = '"+codigoingrediente+"'";
						Conexion.ejecutar(tiraSQL3);
						if(existencia<cantidadautilizar){
							JOptionPane.showMessageDialog(null, "No hay suficienta cantidad del ingrediente: "+
									"'"+descripcion+"' para sacar la orden...");
							seguir=true;
							
						}
					}
				}
				catch (SQLException e){
					e.printStackTrace();
				}
			}
		}
		catch (SQLException e){
			e.printStackTrace();
		}
		return seguir;
	}
	
	public void actualizarOrden(String codigoproducto, float cantidad){
		float existencia=0;
		String codigoingrediente = "";
		float cantidadingrediente=0;
		float cantidadautilizar=0;
		
		String tiraSQL = "select codigoingrediente "+
					"from ingrediente where codigoingrediente = any"+
					"(select codigoingrediente from detalleproducto where "+
					"codigoproducto='"+codigoproducto+"')";
		
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while(resultSet.next()){
				codigoingrediente=resultSet.getString("codigoingrediente");
				String tiraSQL2 = "select i.existencia, dp.cantidad from ingrediente as i "+
				", detalleproducto as dp where dp.codigoingrediente = '"+codigoingrediente+"' "+
				"and dp.codigoproducto = '"+codigoproducto+"' and i.codigoingrediente ='"+codigoingrediente+"'";
				ResultSet resultSet2 = Conexion.consultar(tiraSQL2);
				try{
					while(resultSet2.next()){
						existencia = resultSet2.getFloat("existencia");
						cantidadingrediente = resultSet2.getFloat("cantidad");
						cantidadautilizar=cantidad*cantidadingrediente;
						existencia = existencia+cantidadautilizar;
						String tiraSQL3 = "Update ingrediente set existencia = "
							+existencia+" where codigoingrediente = '"+codigoingrediente+"'";
						Conexion.ejecutar(tiraSQL3);
					}
				}
				catch (SQLException e){
					e.printStackTrace();
				}
			}
		}
		catch (SQLException e){
			e.printStackTrace();
		}
		
	}

}